package com.logistics.team3.service;

import java.io.Serializable;
import java.util.List;

import com.logistics.team3.common.Page;

public interface BaseService<T>  {
	/**
	 * 插入该对象
	 * @param entity 实体对象
	 */
	public void save(T entity);
	
	/**
	 * 更新该对象
	 * @param entity 实体对象
	 */
	public void update(T entity);
	
	/**
	 * 删除该对象
	 * @param entity 实体对象
	 */
	public void delete(T entity);
	
	/**
	 * 通过oid查询对象 并返回对象 T
	 * @param id 表示一个oid
	 * @return 具有该oid的对象
	 */
	public T findById(Serializable id);
	
	/**
	 * 无条件查询该对象所有数据
	 * @return 对象集合
	 */
	public List<T> findAll();
	
	/**
	 * 
	 * @param hql 		 通过hql语句查询对象
	 * @param params  	hql语句中需要的参数
	 * @return			对象集合
	 */
	public List<T> findByHql(String hql,Object... params);
	
	/**
	 * 无条件查询该对象所有数据的记录数
	 * @return 记录数
	 */
	public Integer findCount();
	
	/**
	 * 通过hql语句查询该对象所有数据的记录数
	 * @param hql	  	hql语句
	 * @param params  	hql语句中需要的参数
	 * @return 			记录数
	 */
	public Integer findCount(String hql,Object... params);
	
	/**
	 * 无条件分页查询
	 * @param pageIndex 当前页码的索引(如第xx页)
	 * @param pageSize 	每页的页码数量 如(每页xx条)
	 * @return 			Page类
	 */
	public Page<T> findByPage(int pageIndex,int pageSize);
	
	/**
	 * 通过hql语句 分页查询
	 * @param hql		hql语句
	 * @param pageIndex	当前页码的索引(如第xx页)
	 * @param pageSize	每页的页码数量 如(每页xx条)
	 * @param params 	hql语句中需要的参数
	 * @return 			Page类
	 */
	public Page<T> findByPage(String hql,int pageIndex,int pageSize,Object... params);

}
